package controller.states;


import event.numberevent.NumberEvent;
import event.numberevent.NumberListener;
import event.numberevent.Range;
import event.numberevent.StateNumber;

/**rappresenta una classe che e' interessata ai cambiamenti di stato dell'utente.
 * Questa interfaccia rende 
 * 
 * @author Koldar
 * @version 1.0 
 *
 */
public interface UserGeneralStateListener extends NumberListener<Integer>{
	
	/**indica che l'utente ha appena inizializzato l'applicazione*/
	public int START=0;
	/**indica che l'utente al momento non sta effettuando alcuna operazione di modifica del grafo*/
	public int IDLE=1;
	/**indica che l'sutente ha intrapreso un'azione di modifica del grafo*/
	public int EDIT=2;
	/**rappresenta lo stato dell'applicazione*/
	public StateNumber<Integer> userMode=new StateNumber<Integer>(START);
	
	/**lista di istruzioni che rappresentano cosa deve fare un listener se lo stato e' {@link #START}}
	 * 
	 * @param arg0 un evento contenente le informazioni necessarie per elaborare l'evento
	 */
	@Range(inf = START, sup = START)
	public void startUserState(NumberEvent<Integer> arg0);
	/**lista di istruzioni che rappresentano cosa deve fare un listener se lo stato e' {@link #IDLE}}
	 * 
	 * @param arg0 un evento contenente le informazioni necessarie per elaborare l'evento
	 */
	@Range(inf = IDLE, sup = IDLE)
	public void idleUserState(NumberEvent<Integer> arg0);
	/**lista di istruzioni che rappresentano cosa deve fare un listener se lo stato e' {@link #EDIT}}
	 * 
	 * @param arg0 un evento contenente le informazioni necessarie per elaborare l'evento
	 */
	@Range(inf = EDIT, sup = EDIT)
	public void editUserState(NumberEvent<Integer> arg0);
}
